import axios, { AxiosInstance, AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';
import { ElMessage } from 'element-plus';

const service: AxiosInstance = axios.create({
    // baseURL: '/api', // 这里填写你的后端API地址
    baseURL: 'http://localhost:8080/api',
    timeout: 5000
});

service.interceptors.request.use(
    (config: InternalAxiosRequestConfig) => {
        return config;
    },
    (error: AxiosError) => {
        console.log(error);
        return Promise.reject();
    }
);


service.interceptors.response.use(
    (response: AxiosResponse) => {
        if (response.status === 200) {
            return response;
        } else {
            // 根据不同的状态码显示不同的错误信息
            switch (response.status) {
                case 400:
                    ElMessage.error('${response.message}');
                    break;

                case 401:
                    ElMessage.error('未授权，请重新登录');
                    break;
                case 403:
                    ElMessage.error('拒绝访问');
                    break;
                case 404:
                    ElMessage.error('请求资源不存在');
                    break;
                case 500:
                    ElMessage.error('服务器内部错误');
                    break;
                default:
                    ElMessage.error(`请求失败，状态码: ${response.status}`);
            }
            return Promise.reject(new Error(`请求失败，状态码: ${response.status}`));
        }
    },
    (error: AxiosError) => {
        // 处理网络错误或其他异常
        if (error.response) {
            // 根据不同的状态码显示不同的错误信息
            switch (error.response.status) {
                case 400:
                    ElMessage.error(error.response.data.message || '请求错误');
                    break;
                case 401:
                    ElMessage.error('未授权，请重新登录');
                    break;
                case 403:
                    ElMessage.error('拒绝访问');
                    break;
                case 404:
                    ElMessage.error('请求资源不存在');
                    break;
                case 500:
                    ElMessage.error('服务器内部错误');
                    break;
                default:
                    ElMessage.error(`请求失败，状态码: ${error.response.status}`);
            }
        } else if (error.request) {
            // 网络错误
            ElMessage.error('网络错误，请检查网络连接');
        } else {
            // 其他错误
            ElMessage.error('请求失败');
        }
        return Promise.reject(error);
    }
);

export default service;
